package fachada;

import javax.naming.CommunicationException;

import medicos.IteratorMedicos;
import medicos.Medico;
import medicos.MedicoJaCadastradoException;
import medicos.MedicoNaoEncontradoException;
import pacientes.IteratorPacientes;
import pacientes.Paciente;
import pacientes.PacienteJaCadastradoException;
import pacientes.PacienteNaoEncontradoException;
import planosSaude.IteratorPlanosSaude;
import planosSaude.PlanoSaude;
import planosSaude.PlanoSaudeEncontradoException;
import planosSaude.PlanoSaudeNaoEncontradoException;
import util.IllegalArgumentException;
import util.RepositorioException;
import consultas.Consulta;
import consultas.ConsultaInexistenteException;
import consultas.ConsultaJaExisteException;
import consultas.IteratorConsultas;
import consultas.RepositorioConsultas;
import doencas.Doenca;
import doencas.DoencaJaCadastradaException;
import doencas.DoencaNaoEncontradaException;
import doencas.IteratorDoencas;
import exames.CodigoExameInvalidoException;
import exames.Exame;
import exames.ExameJaCadastradoException;
import exames.ExameNaoEncontradoException;
import exames.IteratorExames;
import exames.RepositorioExames;

public interface IClinica {

	/////////////// paulo
	public abstract IteratorExames getExames() throws  CommunicationException,  RepositorioException;

	public abstract void cadastrar(Exame exame)
			throws  CommunicationException,  ExameJaCadastradoException, RepositorioException,
			IllegalArgumentException, PacienteNaoEncontradoException,
			MedicoNaoEncontradoException;

	public abstract void atualiza(Exame exame)
			throws  CommunicationException,  ExameNaoEncontradoException, IllegalArgumentException,
			RepositorioException, PacienteNaoEncontradoException,
			MedicoNaoEncontradoException;

	public abstract RepositorioExames procurar(Exame exame) 
			throws RepositorioException, CommunicationException;

	public abstract Exame procurarExame(long codigo)
			throws  CommunicationException,  ExameNaoEncontradoException, RepositorioException;

	public abstract void removerExame(long codigo)
			throws  CommunicationException,  ExameNaoEncontradoException, RepositorioException;

	//////////////////// jaldemir
	public abstract IteratorConsultas getConsultas()
			throws  CommunicationException,  RepositorioException;

	public abstract void cadastrar(Consulta consulta)
			throws  CommunicationException,  IllegalArgumentException, ConsultaJaExisteException,
			RepositorioException, CodigoExameInvalidoException,
			MedicoNaoEncontradoException, PacienteNaoEncontradoException;

	public abstract void atualizar(Consulta consulta)
			throws  CommunicationException,  IllegalArgumentException, ConsultaInexistenteException,
			RepositorioException, CodigoExameInvalidoException,
			PacienteNaoEncontradoException, MedicoNaoEncontradoException,
			ExameNaoEncontradoException, CommunicationException;

	public abstract Consulta procurarConsulta(long codigo)
			throws  CommunicationException,  ConsultaInexistenteException, RepositorioException;

	public abstract RepositorioConsultas procurar(Consulta consulta)
			throws  CommunicationException, RepositorioException;

	public abstract void removerConsulta(long codigo)
			throws  CommunicationException,  IllegalArgumentException, ConsultaInexistenteException,
			RepositorioException;

	/////////////// Reinaldo
	public abstract void atualizar(Paciente paciente)
			throws  CommunicationException,  PacienteNaoEncontradoException, RepositorioException,
			PlanoSaudeNaoEncontradoException, IllegalArgumentException;

	public abstract Paciente procurarPaciente(long codigo)
			throws  CommunicationException,  PacienteNaoEncontradoException, RepositorioException;

	public abstract void cadastrar(Paciente paciente)
			throws  CommunicationException,  PacienteJaCadastradoException, RepositorioException,
			PlanoSaudeNaoEncontradoException;

	public abstract void removerPaciente(long codigo)
			throws  CommunicationException,  PacienteNaoEncontradoException, RepositorioException;

	public abstract IteratorPacientes getPacientes() throws  CommunicationException, RepositorioException;

	////////////////// tereza
	public abstract void atualizar(Medico medico)
			throws  CommunicationException,  MedicoNaoEncontradoException, RepositorioException, IllegalArgumentException;

	public abstract Medico procurarMedico(long codigo)
			throws  CommunicationException,  MedicoNaoEncontradoException, RepositorioException;

	public abstract void cadastrar(Medico medico)
			throws  CommunicationException,  MedicoJaCadastradoException, RepositorioException;

	public abstract void removerMedico(long codigo)
			throws  CommunicationException,  MedicoNaoEncontradoException, RepositorioException;

	public abstract IteratorMedicos getMedicos() throws  CommunicationException, RepositorioException;

	///////////////// LuizFernando
	public abstract void atualizar(Doenca doenca)
			throws  CommunicationException,  DoencaNaoEncontradaException, RepositorioException;

	public abstract Doenca procurarDoenca(long codigo)
			throws  CommunicationException,  DoencaNaoEncontradaException, RepositorioException;

	public abstract void cadastrar(Doenca doenca)
			throws  CommunicationException,  DoencaJaCadastradaException, DoencaNaoEncontradaException,
			RepositorioException;

	public abstract void removerDoenca(long codigo)
			throws  CommunicationException,  DoencaNaoEncontradaException, RepositorioException;

	public abstract IteratorDoencas getDoencas() throws  CommunicationException, RepositorioException;

	////////////////////// Hugo
	public abstract void atualizar(PlanoSaude planoSaude)
			throws  CommunicationException, RepositorioException, PlanoSaudeNaoEncontradoException;

	public abstract PlanoSaude procurarPlanoSaude(long codigo)
			throws  CommunicationException, RepositorioException, PlanoSaudeNaoEncontradoException;

	public abstract void cadastrar(PlanoSaude planoSaude)
			throws  CommunicationException,  RepositorioException, PlanoSaudeEncontradoException;

	public abstract void removerPlanoSaude(long codigo)
			throws  CommunicationException, RepositorioException, PlanoSaudeNaoEncontradoException;

	public abstract IteratorPlanosSaude getPlanos() throws  CommunicationException, RepositorioException;

}